package com.jw.poi;

import com.jacob.activeX.ActiveXComponent;
import com.jacob.com.Dispatch;

/**
 * 使用office将word转PDF
 * 前提：1、本机上安装了2007以上的office软件
 *      2、jdk1.6以上的版本
 */
public class Word2PDF {
    public static void main(String[] args) {
        String wordFile = "D:\\Download\\ChromeDownload\\员工（李四）合同.docx";
        String targetFile = "E:\\李四合同.pdf";

        System.out.println("即将执行Word转PDF操作...");

        // 使用ActiveXComponent对象可以实现对电脑中的程序进行进行控制（操作）
        ActiveXComponent activeXComponent = null;
        try {
            // 调用Windows中的程序，此时调用的是word文档，对应的名称是Word.application
            activeXComponent = new ActiveXComponent("Word.application");
            // 打开程序，且不在页面中显示
            activeXComponent.setProperty("Visible",false);
            // 获取到所有的文档信息
            Dispatch documents = activeXComponent.getProperty("Documents").toDispatch();
            // 在所有文档中查询到目标文件，并进行打开操作
            Dispatch wordDoc = Dispatch.call(documents, "Open", wordFile).toDispatch();
            // 参数依次：目标Dispatch、操作命令、目标文件、PDF格式的宏值（17为固定格式）
            Dispatch.call(wordDoc,"SaveAs",targetFile,17);
            // 需要进行关闭office操作
            Dispatch.call(wordDoc,"Close");
            System.out.println("转换成功！");
        }catch (Exception exception){
            System.err.println("Word转PDF操作出错...");
        }finally {
            // 需要将ActiveXComponent进行关闭  参数二：0表示关闭相关程序
            activeXComponent.invoke("Quit",0);
        }
    }
}
